iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 13
0
Mobile Development

《菜鳥のSwift》持續30天開發挑戰系列 第 13

《DAY 13》我的第一個小遊戲 App,1A2B 猜數字遊戲(一)

  • 分享至 

  • xImage
  •  

1A2B,許多人都有聽過或玩過這個遊戲,遊戲規則如下:

  1. 遊戲會隨機產生一組 4 位不同的數字。
  2. 玩家猜測。
  3. 程式會根據您的猜測值回報 A 和 B 的數量,數字及位置皆正確為 A,僅有數字正確則為 B。
  4. 例如:正確值為 1234,您輸入 1247,則會出現 2A1B。
  5. 達成 4A0B 代表猜到全部數字且位置皆正確,遊戲結束。

學過程式語言的可能都寫過這個遊戲,不過我們要把它換成 Swift 的語法!

首先要有一個陣列,裡面存放 4 個 0~9 的整數值,且每個整數值不同,在按下開始遊戲(按鈕)的時候會把亂數決定好,並且傳遞亂數到第二個畫面。

  • ViewController.swift
import UIKit

class ViewController: UIViewController {
    
    var pc = [0, 0, 0, 0] // 宣告成全域讓所有 func 可以讀到
    
    override func viewDidLoad() {
        super.viewDidLoad()
        view.backgroundColor = #colorLiteral(red: 0.9194224477, green: 0.8519927263, blue: 0.7762778401, alpha: 1)
    }
    
    @IBAction func startGame(_ sender: UIButton) {
    
        pc[0] = Int.random(in: 0...9) // 產生 0~9 的數字
        while(true) {
            pc[1] = Int.random(in: 0...9)
            if (pc[1] != pc[0]) {
                break
            }
        }
        while(true) {
            pc[2] = Int.random(in: 0...9)
            if (pc[2] != pc[1] && pc[2] != pc[0]) {
                break
            }
        }
        while(true) {
            pc[3] = Int.random(in: 0...9)
            if (pc[3] != pc[0] && pc[3] != pc[1] && pc[3] != pc[2]) {
                break
            }
        }
        
        let myS = UIStoryboard(name: "Main", bundle: nil)
        let vc = myS.instantiateViewController(identifier: "SecondViewController") as! SecondViewController
        vc.str = pc // 傳遞亂數
        show(vc, sender: nil)
    }
}
  • SecondViewController.swift
import UIKit

class SecondViewController: UIViewController {
    
    var str:[Int] = []
    override func viewDidLoad() {
        super.viewDidLoad()
        print(str) // 可以在除錯區裡看到結果
    }
}

我們已經產生亂數出來了,緊接著就是要根據我們的輸入判斷幾個 A 和幾個 B,這個部分留給明天繼續努力。


上一篇
《DAY 12》使用導覽控制器
下一篇
《DAY 14》我的第一個小遊戲 App,1A2B 猜數字遊戲(二)
系列文
《菜鳥のSwift》持續30天開發挑戰30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言